<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
<script type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
<title>Dynamic context help</title>
</head>
<body>

<h2>Dynamic context help</h2>

<p>
In addition to statically associating widgets and context Ids, it is possible to 
provide this information dynamically for a more dynamic context-sensitive help 
capability. Help system uses context Ids to locate the matching
<a href="../reference/api/org/eclipse/help/IContext.html">
org.eclipse.help.IContext</a> object. The new Help view tracks activation of the 
workbench parts (views and editors) and checks if they adapt to
<a href="../reference/api/org/eclipse/help/IContextProvider.html">
org.eclipse.help.IContextProvider</a> interface. If they do, the view will use 
the context provider to locate the <code>IContext</code> object and get the 
required information from it. This object can be cached or created on the fly.</p>
<p>
Workbench parts that want to create the context object dynamically should adapt 
to the <code>IContextProvider.class</code> object as a key:</p>
<blockquote>
	<pre>public Object getAdapter(Class key) {
	if (key.equals(IContextProvider.class)) {
		return new MyContextProvider();
	}
	return super.getAdapter(key);
}</pre>
</blockquote>
<p>The context provider interface requires implementation of three methods:</p>
<blockquote>
	<pre>public class MyContextProvider implements IContextProvider {
	int getContextChangeMask() {
		return NONE;
	}
	IContext getContext(Object target) {
		return myContext;
	}
	String getSearchExpression(Object target) {
		return null;
	}
}</pre>
</blockquote>
<p>If context change mask returns <code>NONE</code>, context object will need to 
be provided when the workbench part is activated. If <code>SELECTION</code> is 
returned, you will need to provide context object that is sensitive to the 
current selection in the part. Each time part selection provider fires a 
selection change event, the context provider will be asked to provide context 
object.</p>
<p>Optionally, search expression for the dynamic help can be provided. 
Otherwise, a combination of the part name and perspective name will be used with 
good results in most cases.
</p>

<p>
<b>Note:</b> In addition to using context providers (or alternatively), you can use
XML annotations to <a href="ua_dynamic_filters.htm">filter</a> topics in context
help.
</p>

</body>
</html>
